﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using GestionWeb.Models;
using GestionWeb.Excepciones;
using System.Diagnostics.CodeAnalysis;
using System.Security.Principal;
using System.Web.Routing;
using System.Web.Security;
using System.ServiceModel;

namespace GestionWeb.Controllers
{
    public class UsuarioController : Controller
    {

        private UsuariosMS.Usuario[] CrearUsuarios()
        {

            UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();
            UsuariosMS.Usuario[] usuariosLista = obj.ListarUsuario();

            return usuariosLista;
        }

        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();

            return RedirectToAction("Index", "Home");
        }

        public ActionResult LogOn()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LogOn(FormCollection collection)
        {
            UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();

            try
            {
                if (obj.AutenticarUsuario(collection["UserName"].ToString(), collection["Password"].ToString()))
                {
                    FormsAuthentication.SetAuthCookie(collection["UserName"].ToString(), true);
                    return RedirectToAction("Index", "Home");
                }
                return View();
            }
            catch (FaultException<ValidationException> ex)
            {
                ViewData["Error"] = ex.Message;
                return View();
            }
            catch (Exception ex)
            {
                ViewData["Error"] = ex.Message;
                return View();
            }
        }

        public ActionResult Index()
        {
            return View(CrearUsuarios());
        }

        public ActionResult Details(int id)
        {
            UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();
            UsuariosMS.Usuario usuario = obj.ObtenerUsuario(id);

            return View(usuario);
        }

        public ActionResult Create()
        {
            return View();
        }


        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();

                UsuariosMS.Usuario usuario = obj.CrearUsuario(
                    collection["Nombre"],
                    collection["Apellido"],
                    collection["Correo"],
                    collection["Telefono"],
                    DateTime.Parse(collection["FeInicio"]),
                    DateTime.Parse(collection["FeFinal"]),
                    collection["Cuenta"],
                    collection["Password"]
                    );

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Edit(int id)
        {
            UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();
            UsuariosMS.Usuario usuario = obj.ObtenerUsuario(id);

            return View(usuario);
        }

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {

                UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();

                UsuariosMS.Usuario usuario = obj.ModificarUsuario(
                    id,
                    collection["Nombre"],
                    collection["Apellido"],
                    collection["Correo"],
                    collection["Telefono"],
                    DateTime.Parse(collection["FeInicio"]),
                    DateTime.Parse(collection["FeFinal"]),
                    collection["Cuenta"],
                    collection["Password"]
                );

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(int id)
        {
            UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();
            UsuariosMS.Usuario usuario = obj.ObtenerUsuario(id);

            return View(usuario);
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                UsuariosMS.UsuariosClient obj = new UsuariosMS.UsuariosClient();
                obj.EliminarUsuario(id);

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

    }
}